// #include "njm_ecs.hpp"

// namespace njm
// {
//     Coordinator::Coordinator()
//     {
//         Init();
//     }
//     Coordinator::~Coordinator()
//     {
//     }

//     void Coordinator::Init()
//     {
//         mComponentManager = std::make_unique<ComponentManager>();
//         mEntityManager = std::make_unique<EntityManager>();
//         mSystemManager = std::make_unique<SystemManager>();
//     }
//     void Coordinator::Clear()
//     {
//         mComponentManager->Clear();
//         mEntityManager->Clear();
//         mSystemManager->Clear();
//     }
//     // 
//     void Coordinator::Update(float deltaTime)
//     {
//         mSystemManager->Update(deltaTime, mComponentManager, mEntityManager);
//     }

//     void Coordinator::Render(float deltaTime)
//     {
//         mSystemManager->Render(deltaTime, mComponentManager, mEntityManager);
//     }

//     // Entity 相关方法
//     Entity Coordinator::CreateEntity()
//     {
//         return mEntityManager->CreateEntity();
//     }

//     std::vector<Entity> Coordinator::CreateEntities(int count)
//     {
//         std::vector<Entity> entities;
//         for (int i = 0; i < count; i++)
//         {
//             entities.push_back(mEntityManager->CreateEntity());
//         }
//         return entities;
//     }

//     void Coordinator::DestroyEntity(Entity entity)
//     {
//         mEntityManager->DestroyEntity(entity);
//         mComponentManager->EntityDestroyed(entity);
//         mSystemManager->EntityDestroyed(entity);
//     }

//     // Component 相关方法
//     template <typename T>
//     void Coordinator::RegisterComponent()
//     {
//         mComponentManager->RegisterComponent<T>();
//     }
//     template <typename T>
//     ComponentType Coordinator::GetComponentType()
//     {
//         return mComponentManager->GetComponentType<T>();
//     }
//     template <typename T>
//     Signature Coordinator::GetComponentSignature()
//     {
//         return mComponentManager->GetComponentSignature<T>();
//     }
//     template <typename T>
//     const char *Coordinator::GetComponentName()
//     {
//         return mComponentManager->GetComponentName<T>();
//     }


//     template <typename T>
//     void Coordinator::AddComponent(Entity entity, T component)
//     {
//         mComponentManager->AddComponent<T>(entity, component);

//         Signature signature = mEntityManager->GetSignature(entity);
//         signature.set(mComponentManager->GetComponentType<T>(), true);
//         mEntityManager->SetSignature(entity, signature);

//         mSystemManager->EntitySignatureChanged(entity, signature);
//     }

//     template <typename T>
//     void Coordinator::RemoveComponent(Entity entity)
//     {
//         mComponentManager->RemoveComponent<T>(entity);

//         Signature signature = mEntityManager->GetSignature(entity);
//         signature.set(mComponentManager->GetComponentType<T>(), false);
//         mEntityManager->SetSignature(entity, signature);

//         mSystemManager->EntitySignatureChanged(entity, signature);
//     }

//     template <typename T>
//     T &Coordinator::GetComponent(Entity entity)
//     {
//         return mComponentManager->GetComponent<T>(entity);
//     }

//     // System 相关方法
//     template <typename T>
//     std::shared_ptr<T> Coordinator::RegisterSystem()
//     {
//         return mSystemManager->RegisterSystem<T>();
//     }

//     template <typename T>
//     void Coordinator::SetSystemSignature(Signature signature)
//     {
//         mSystemManager->SetSignature<T>(signature);
//     }

//     template <typename T>
//     void Coordinator::AddEntityToSystem(Entity entity)
//     {
//         if (mEntityManager->HasSignature(entity, mSystemManager->GetSignature<T>()))
//         {
//             mSystemManager->AddEntityToSystem<T>(entity);
//         }
//     }

//     template <typename T>
//     void Coordinator::RemoveEntityFromSystem(Entity entity)
//     {
//         if (mEntityManager->HasSignature(entity, mSystemManager->GetSignature<T>()))
//         {
//             mSystemManager->RemoveEntityFromSystem<T>(entity);
//         }
//     }


// }
